// var i;
// exports.ControllerNode = exports.PosNode = void 0;
// var c = cc._decorator;
// var s = c.ccclass;
// var l = c.property;
// var u = c.menu;
// var d = (function () {
//     function e() {
//         this.nd = null;
//         this.pos = new cc.Vec2(0, 0);
//     }
//     Object.defineProperty(e.prototype, "cd", {
//         get: function () {
//             return this.nd;
//         },
//         set: function (e) {
//             this.nd = e;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     __decorate(
//         [
//             l({
//                 type: cc.Node,
//                 visible: !1
//             })
//         ],
//         e.prototype,
//         "nd",
//         void 0
//     );
//     __decorate(
//         [
//             l({
//                 type: cc.Node,
//                 displayName: "控制节点"
//             })
//         ],
//         e.prototype,
//         "cd",
//         null
//     );
//     __decorate(
//         [
//             l({
//                 displayName: "节点坐标"
//             })
//         ],
//         e.prototype,
//         "pos",
//         void 0
//     );
//     return __decorate([s("PosNode")], e);
// })();
// exports.PosNode = d;
// var p = (function () {
//     function e() {
//         this.name = "";
//         this.nd = [];
//     }
//     __decorate(
//         [
//             l({
//                 displayName: "控制名称"
//             })
//         ],
//         e.prototype,
//         "name",
//         void 0
//     );
//     __decorate(
//         [
//             l({
//                 type: d,
//                 displayName: "节点&坐标"
//             })
//         ],
//         e.prototype,
//         "nd",
//         void 0
//     );
//     return __decorate([s("ControllerNode")], e);
// })();
// exports.ControllerNode = p;
// var h = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.nodes = [];
//         t._choiceIndex = 0;
//         return t;
//     }
//     __extends(t, e);
//     Object.defineProperty(t.prototype, "choiceIndex", {
//         get: function () {
//             return this._choiceIndex;
//         },
//         set: function () {},
//         enumerable: !1,
//         configurable: !0
//     });
//     t.prototype.setSelectedIndex = function (e) {
//         if (!(e < 0 || e >= this.nodes.length)) {
//             this.selectedIndex = e;
//             for (var t = 0; t < this.nodes[e].nd.length; t++) {
//                 this.nodes[e].nd[t].nd.x = this.nodes[e].nd[t].pos.x;
//                 this.nodes[e].nd[t].nd.y = this.nodes[e].nd[t].pos.y;
//             }
//         }
//     };
//     t.prototype.setSelectedName = function (e) {
//         for (var t = 0; t < this.nodes.length; t++) {
//             if (this.nodes[t].name == e) {
//                 this.selectedIndex = t;
//                 for (var o = 0; o < this.nodes[t].nd.length; o++) {
//                     this.nodes[t].nd[o].nd.x = this.nodes[t].nd[o].pos.x;
//                     this.nodes[t].nd[o].nd.y = this.nodes[t].nd[o].pos.y;
//                 }
//             }
//         }
//     };
//     t.prototype.getSelectedIndex = function () {
//         return this.selectedIndex;
//     };
//     t.prototype.getSelectedName = function () {
//         return this.nodes[this.selectedIndex].name;
//     };
//     t.prototype.getControllerByName = function (e) {
//         for (var t = 0; t < this.nodes.length; t++) {
//             if (this.nodes[t].name == e) {
//                 return this.nodes[t].nd;
//             }
//         }
//     };
//     __decorate(
//         [
//             l({
//                 type: [p],
//                 displayName: "Controller"
//             })
//         ],
//         t.prototype,
//         "nodes",
//         void 0
//     );
//     __decorate(
//         [
//             l({
//                 type: cc.Integer
//             })
//         ],
//         t.prototype,
//         "_choiceIndex",
//         void 0
//     );
//     __decorate(
//         [
//             l({
//                 type: cc.Integer
//             })
//         ],
//         t.prototype,
//         "choiceIndex",
//         null
//     );
//     return __decorate([s, u("Controller/Position Controller")], t);
// })(cc.Component);
// exports.default = h;


// const { ccclass, property, menu } = cc._decorator;

// /**
//  * 建议类名: PositionNode
//  * 表示一个节点及其坐标
//  */
// @ccclass('PosNode')
// class PosNode {
//     /** 节点 */
//     @property({
//         type: cc.Node,
//         visible: false
//     })
//     private _nd: cc.Node | null = null;

//     /** 节点坐标 */
//     @property({
//         displayName: "节点坐标"
//     })
//     public pos: cc.Vec2 = new cc.Vec2(0, 0);

//     /** 控制节点 */
//     @property({
//         type: cc.Node,
//         displayName: "控制节点"
//     })
//     get cd(): cc.Node | null {
//         return this._nd;
//     }
//     set cd(value: cc.Node | null) {
//         this._nd = value;
//     }
// }

// /**
//  * 建议类名: ControlNode
//  * 表示一个控制节点及其名称
//  */
// @ccclass('ControllerNode')
// class ControllerNode {
//     /** 控制名称 */
//     @property({
//         displayName: "控制名称"
//     })
//     public name: string = "";

//     /** 节点及其坐标 */
//     @property({
//         type: [PosNode],
//         displayName: "节点&坐标"
//     })
//     public nd: PosNode[] = [];
// }

// /**
//  * 建议类名: PositionController
//  * 控制多个节点的位置
//  */
// @ccclass
// @menu("Controller/Position Controller")
// class PosController extends cc.Component {
//     /** 控制节点数组 */
//     @property({
//         type: [ControllerNode],
//         displayName: "Controller"
//     })
//     public nodes: ControllerNode[] = [];

//     /** 当前选择的索引 */
//     @property({
//         type: cc.Integer
//     })
//     private _choiceIndex: number = 0;

//     /** 当前选择的索引 */
//     @property({
//         type: cc.Integer
//     })
//     get choiceIndex(): number {
//         return this._choiceIndex;
//     }
//     set choiceIndex(value: number) {
//         // 这里没有设置逻辑，如果需要可以添加
//     }

//     /**
//      * 设置选择的索引
//      * @param index 索引
//      */
//     public setSelectedIndex(index: number): void {
//         if (index >= 0 && index < this.nodes.length) {
//             this._choiceIndex = index;
//             for (let i = 0; i < this.nodes[index].nd.length; i++) {
//                 this.nodes[index].nd[i].cd!.x = this.nodes[index].nd[i].pos.x;
//                 this.nodes[index].nd[i].cd!.y = this.nodes[index].nd[i].pos.y;
//             }
//         }
//     }

//     /**
//      * 设置选择的名称
//      * @param name 名称
//      */
//     public setSelectedName(name: string): void {
//         for (let i = 0; i < this.nodes.length; i++) {
//             if (this.nodes[i].name === name) {
//                 this._choiceIndex = i;
//                 for (let j = 0; j < this.nodes[i].nd.length; j++) {
//                     this.nodes[i].nd[j].cd!.x = this.nodes[i].nd[j].pos.x;
//                     this.nodes[i].nd[j].cd!.y = this.nodes[i].nd[j].pos.y;
//                 }
//             }
//         }
//     }

//     /**
//      * 获取当前选择的索引
//      * @returns 当前选择的索引
//      */
//     public getSelectedIndex(): number {
//         return this._choiceIndex;
//     }

//     /**
//      * 获取当前选择的名称
//      * @returns 当前选择的名称
//      */
//     public getSelectedName(): string {
//         return this.nodes[this._choiceIndex].name;
//     }

//     /**
//      * 根据名称获取控制节点
//      * @param name 名称
//      * @returns 控制节点数组
//      */
//     public getControllerByName(name: string): PosNode[] | undefined {
//         for (let i = 0; i < this.nodes.length; i++) {
//             if (this.nodes[i].name === name) {
//                 return this.nodes[i].nd;
//             }
//         }
//     }
// }

// export { PosNode, ControllerNode };
// export default PosController;

const { ccclass, property, menu } = cc._decorator;

/**
 * 建议类名: PositionNode
 * 表示一个节点及其坐标
 */
@ccclass('PosNode')
class PosNode {
    /** 节点 */
    @property({
        type: cc.Node,
        visible: false
    })
    private _node: cc.Node | null = null; // 修改变量名为 _node，更易懂

    /** 节点坐标 */
    @property({
        displayName: "节点坐标"
    })
    public position: cc.Vec2 = new cc.Vec2(0, 0); // 修改变量名为 position，更易懂

    /** 控制节点 */
    @property({
        type: cc.Node,
        displayName: "控制节点"
    })
    get node(): cc.Node | null {
        return this._node;
    }
    set node(value: cc.Node | null) {
        this._node = value;
    }
}

/**
 * 建议类名: ControlNode
 * 表示一个控制节点及其名称
 */
@ccclass('ControllerNode')
class ControllerNode {
    /** 控制名称 */
    @property({
        displayName: "控制名称"
    })
    public name: string = "";

    /** 节点及其坐标 */
    @property({
        type: [PosNode],
        displayName: "节点&坐标"
    })
    public nodes: PosNode[] = []; // 修改变量名为 nodes，更易懂
}

/**
 * 建议类名: PositionController
 * 控制多个节点的位置
 */
@ccclass
@menu("Controller/Position Controller")
class PositionController extends cc.Component {
    /** 控制节点数组 */
    @property({
        type: [ControllerNode],
        displayName: "Controller"
    })
    public controllerNodes: ControllerNode[] = []; // 修改变量名为 controllerNodes，更易懂

    /** 当前选择的索引 */
    @property({
        type: cc.Integer
    })
    private _currentIndex: number = 0; // 修改变量名为 _currentIndex，更易懂

    /** 当前选择的索引 */
    @property({
        type: cc.Integer
    })
    get choiceIndex(): number {
        return this._currentIndex;
    }
    set choiceIndex(value: number) {
        // 这里没有设置逻辑，如果需要可以添加
    }

    /**
     * 建议方法名: setSelectionIndex
     * 设置选择的索引
     * @param index 索引
     */
    public setSelectionIndex(index: number): void {
        if (index >= 0 && index < this.controllerNodes.length) {
            this._currentIndex = index;
            for (const node of this.controllerNodes[index].nodes) {
                if (node.node) { // 添加了 null 检查，防止可能的报错
                    node.node.x = node.position.x;
                    node.node.y = node.position.y;
                }
            }
        }
    }

    /**
     * 建议方法名: setSelectionName
     * 设置选择的名称
     * @param name 名称
     */
    public setSelectionName(name: string): void {
        for (let i = 0; i < this.controllerNodes.length; i++) {
            if (this.controllerNodes[i].name === name) {
                this._currentIndex = i;
                for (const node of this.controllerNodes[i].nodes) {
                    if (node.node) {
                        node.node.x = node.position.x;
                        node.node.y = node.position.y;
                    }
                }
                break; // 找到符合条件的即可退出循环
            }
        }
    }

    /**
     * 建议方法名: getSelectionIndex
     * 获取当前选择的索引
     * @returns 当前选择的索引
     */
    public getSelectionIndex(): number {
        return this._currentIndex;
    }

    /**
     * 建议方法名: getSelectionName
     * 获取当前选择的名称
     * @returns 当前选择的名称
     */
    public getSelectionName(): string {
        return this.controllerNodes[this._currentIndex].name;
    }

    /**
     * 建议方法名: getControllersByName
     * 根据名称获取控制节点
     * @param name 名称
     * @returns 控制节点数组
     */
    public getControllersByName(name: string): PosNode[] | undefined {
        for (const controllerNode of this.controllerNodes) {
            if (controllerNode.name === name) {
                return controllerNode.nodes;
            }
        }
    }
}

export { PosNode, ControllerNode };
export default PositionController;